package dataprocess;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import database.BooleanQuestion;
import database.MultipleQuestion;
import database.NumericQuestion;
import database.Question;
import database.SimpleQuestion;

/**
 * Nexo entre la base de datos de preguntas y los archivos de preguntas.
 * Acceso solo para escritura
 */

public class QuestionsDb {
	FileWriter fw = null;
	
	/**
	 * Crea una nueva instancia de QuestionsDb
	 */
	
	public QuestionsDb() {
		super();
	}
	
	/**
	 * Escribe a archivo el listado de todas las preguntas en la base de datos.
	 * Si el listado es vacío no hace nada.
	 * @param qlist - listado de preguntas
	 * @throws IOException - Si no se puedo guardar las preguntas en disco
	 *
	 */
	
	public void writeFiles(List<Question> qlist) throws IOException {
		fw = new FileWriter("data/Questions/preguntas.txt");
		
		if (qlist != null)
		{
			Iterator<Question> qiter = qlist.iterator();
			Question q;
			
			while(qiter.hasNext()) {
				q = (Question)qiter.next();
				
				if (q instanceof BooleanQuestion) {
					((BooleanQuestion)q).saveToFile(fw);
				} else if (q instanceof NumericQuestion) {
					((NumericQuestion)q).saveToFile(fw);
				} else if (q instanceof SimpleQuestion) {
					((SimpleQuestion)q).saveToFile(fw);
				} else {
					((MultipleQuestion)q).saveToFile(fw);
				}
				
				// Si hay siguiente pregunta, las separa.
				if (qiter.hasNext()) {
					fw.write("\n");
					fw.write("####");
					fw.write("\n");
				}
				fw.flush();
			}
		}
			
		return;
	}

	/**
	 * Cierra la instancia de FileWriter.
	 */
	
	@Override
	protected void finalize() {
		
		try {
			fw.close();
		} catch (IOException e) {
			System.err.println(e.getMessage());
		} finally {
			try {
				super.finalize();
			} catch (Throwable e) {
				System.err.println(e.getMessage());
			}
		}
	}
	
}
